package run.siyuan.jdk.算法_4版.排序;

import edu.princeton.cs.algs4.StdOut;

/**
 * @className: Example
 * @Description: TODO
 * @author: siyuan
 * @date: 2022/12/14 16:38
 */
public class BaseSort {

    /**
     * 将a[]按升序排列并打印
     *
     * @param a 源数组
     */
//    public static void showSortAsc(Comparable[] a){};

    /**
     * 将a[]按升序排列并打印
     *
     * @param a 源数组
     */
//    public static void showSortDesc(Comparable[] a){};

    /**
     * 将a[]按升序排列并返回
     *
     * @param a 源数组
     * @return
     */
//    public static Comparable[] returnSortAsc(Comparable[] a){};

    /**
     * 将a[]按升序排列并返回
     *
     * @param a 源数组
     * @return
     */
//    public static Comparable[] returnSortDesc(Comparable[] a){};

    /**
     * 少
     *
     * @param v 元素
     * @param w 元素
     * @return
     */
    public static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }

    /**
     * 多
     *
     * @param v 元素
     * @param w 元素
     * @return
     */
    public static boolean more(Comparable v, Comparable w) {
        return v.compareTo(w) > 0;
    }

    /**
     * 多
     *
     * @param v 元素
     * @param w 元素
     * @return
     */
    public static boolean equals(Comparable v, Comparable w) {
        return v.compareTo(w) == 0;
    }

    /**
     * 交换
     *
     * @param a 源数组
     * @param i 索引
     * @param j 索引
     */
    public static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    /**
     * 在单行打印数组
     *
     * @param a 源数组
     */
    public static void show(Comparable[] a) {
        for (Comparable comparable : a) {
            StdOut.print(comparable + " ");
        }
        StdOut.println();
    }

    /**
     * 测试数组元素是否有序
     *
     * @param a 源数组
     * @return boolean
     */
    public static boolean isSort(Comparable[] a) {
        for (int i = 1; i < a.length; i++) {
            if (less(a[i], a[i - 1])) {
                return false;
            }
        }
        return true;
    }

}
